(function(a) {
    String.prototype.trim === a && (String.prototype.trim = function() {
        return this.replace(/^\s+/, "").replace(/\s+$/, "")
    }),
    Array.prototype.reduce === a && (Array.prototype.reduce = function(b) {
        if (this === void 0 || this === null) throw new TypeError;
        var c = Object(this),
        d = c.length >>> 0,
        e = 0,
        f;
        if (typeof b != "function") throw new TypeError;
        if (d == 0 && arguments.length == 1) throw new TypeError;
        if (arguments.length >= 2) f = arguments[1];
        else do {
            if (e in c) {
                f = c[e++];
                break
            }
            if (++e >= d) throw new TypeError
        } while (! 0 );
        while (e < d) e in c && (f = b.call(a, f, c[e], e, c)),
        e++;
        return f
    })
})();
var Zepto = function() {
    function A(a) {
        return v.call(a) == "[object Function]"
    }
    function B(a) {
        return a instanceof Object
    }
    function C(b) {
        var c, d;
        if (v.call(b) !== "[object Object]") return ! 1;
        d = A(b.constructor) && b.constructor.prototype;
        if (!d || !hasOwnProperty.call(d, "isPrototypeOf")) return ! 1;
        for (c in b);
        return c === a || hasOwnProperty.call(b, c)
    }
    function D(a) {
        return a instanceof Array
    }
    function E(a) {
        return typeof a.length == "number"
    }
    function F(b) {
        return b.filter(function(b) {
            return b !== a && b !== null
        })
    }
    function G(a) {
        return a.length > 0 ? [].concat.apply([], a) : a
    }
    function H(a) {
        return a.replace(/::/g, "/").replace(/([A-Z]+)([A-Z][a-z])/g, "$1_$2").replace(/([a-z\d])([A-Z])/g, "$1_$2").replace(/_/g, "-").toLowerCase()
    }
    function I(a) {
        return a in i ? i[a] : i[a] = new RegExp("(^|\\s)" + a + "(\\s|$)")
    }
    function J(a, b) {
        return typeof b == "number" && !k[H(a)] ? b + "px": b
    }
    function K(a) {
        var b, c;
        return h[a] || (b = g.createElement(a), g.body.appendChild(b), c = j(b, "").getPropertyValue("display"), b.parentNode.removeChild(b), c == "none" && (c = "block"), h[a] = c),
        h[a]
    }
    function L(b, d) {
        return d === a ? c(b) : c(b).filter(d)
    }
    function M(a, b, c, d) {
        return A(b) ? b.call(a, c, d) : b
    }
    function N(a, b, d) {
        var e = a % 2 ? b: b.parentNode;
        e ? e.insertBefore(d, a ? a == 1 ? e.firstChild: a == 2 ? b: null: b.nextSibling) : c(d).remove()
    }
    function O(a, b) {
        b(a);
        for (var c in a.childNodes) O(a.childNodes[c], b)
    }
    var a, b, c, d, e = [],
    f = e.slice,
    g = window.document,
    h = {},
    i = {},
    j = g.defaultView.getComputedStyle,
    k = {
        "column-count": 1,
        columns: 1,
        "font-weight": 1,
        "line-height": 1,
        opacity: 1,
        "z-index": 1,
        zoom: 1
    },
    l = /^\s*<(\w+|!)[^>]*>/,
    m = [1, 3, 8, 9, 11],
    n = ["after", "prepend", "before", "append"],
    o = g.createElement("table"),
    p = g.createElement("tr"),
    q = {
        tr: g.createElement("tbody"),
        tbody: o,
        thead: o,
        tfoot: o,
        td: p,
        th: p,
        "*": g.createElement("div")
    },
    r = /complete|loaded|interactive/,
    s = /^\.([\w-]+)$/,
    t = /^#([\w-]+)$/,
    u = /^[\w-]+$/,
    v = {}.toString,
    w = {},
    x,
    y,
    z = g.createElement("div");
    return w.matches = function(a, b) {
        if (!a || a.nodeType !== 1) return ! 1;
        var c = a.webkitMatchesSelector || a.mozMatchesSelector || a.oMatchesSelector || a.matchesSelector;
        if (c) return c.call(a, b);
        var d, e = a.parentNode,
        f = !e;
        return f && (e = z).appendChild(a),
        d = ~w.qsa(e, b).indexOf(a),
        f && z.removeChild(a),
        d
    },
    x = function(a) {
        return a.replace(/-+(.)?/g,
        function(a, b) {
            return b ? b.toUpperCase() : ""
        })
    },
    y = function(a) {
        return a.filter(function(b, c) {
            return a.indexOf(b) == c
        })
    },
    w.fragment = function(b, d) {
        d === a && (d = l.test(b) && RegExp.$1),
        d in q || (d = "*");
        var e = q[d];
        return e.innerHTML = "" + b,
        c.each(f.call(e.childNodes),
        function() {
            e.removeChild(this)
        })
    },
    w.Z = function(a, b) {
        return a = a || [],
        a.__proto__ = arguments.callee.prototype,
        a.selector = b || "",
        a
    },
    w.isZ = function(a) {
        return a instanceof w.Z
    },
    w.init = function(b, d) {
        if (!b) return w.Z();
        if (A(b)) return c(g).ready(b);
        if (w.isZ(b)) return b;
        var e;
        if (D(b)) e = F(b);
        else if (C(b)) e = [c.extend({},
        b)],
        b = null;
        else if (m.indexOf(b.nodeType) >= 0 || b === window) e = [b],
        b = null;
        else if (l.test(b)) e = w.fragment(b.trim(), RegExp.$1),
        b = null;
        else {
            if (d !== a) return c(d).find(b);
            e = w.qsa(g, b)
        }
        return w.Z(e, b)
    },
    c = function(a, b) {
        return w.init(a, b)
    },
    c.extend = function(c) {
        return f.call(arguments, 1).forEach(function(d) {
            for (b in d) d[b] !== a && (c[b] = d[b])
        }),
        c
    },
    w.qsa = function(a, b) {
        var c;
        return a === g && t.test(b) ? (c = a.getElementById(RegExp.$1)) ? [c] : e: a.nodeType !== 1 && a.nodeType !== 9 ? e: f.call(s.test(b) ? a.getElementsByClassName(RegExp.$1) : u.test(b) ? a.getElementsByTagName(b) : a.querySelectorAll(b))
    },
    c.isFunction = A,
    c.isObject = B,
    c.isArray = D,
    c.isPlainObject = C,
    c.inArray = function(a, b, c) {
        return e.indexOf.call(b, a, c)
    },
    c.trim = function(a) {
        return a.trim()
    },
    c.uuid = 0,
    c.map = function(a, b) {
        var c, d = [],
        e,
        f;
        if (E(a)) for (e = 0; e < a.length; e++) c = b(a[e], e),
        c != null && d.push(c);
        else for (f in a) c = b(a[f], f),
        c != null && d.push(c);
        return G(d)
    },
    c.each = function(a, b) {
        var c, d;
        if (E(a)) {
            for (c = 0; c < a.length; c++) if (b.call(a[c], c, a[c]) === !1) return a
        } else for (d in a) if (b.call(a[d], d, a[d]) === !1) return a;
        return a
    },
    c.fn = {
        forEach: e.forEach,
        reduce: e.reduce,
        push: e.push,
        indexOf: e.indexOf,
        concat: e.concat,
        map: function(a) {
            return c.map(this,
            function(b, c) {
                return a.call(b, c, b)
            })
        },
        slice: function() {
            return c(f.apply(this, arguments))
        },
        ready: function(a) {
            return r.test(g.readyState) ? a(c) : g.addEventListener("DOMContentLoaded",
            function() {
                a(c)
            },
            !1),
            this
        },
        get: function(b) {
            return b === a ? f.call(this) : this[b]
        },
        toArray: function() {
            return this.get()
        },
        size: function() {
            return this.length
        },
        remove: function() {
            return this.each(function() {
                this.parentNode != null && this.parentNode.removeChild(this)
            })
        },
        each: function(a) {
            return this.forEach(function(b, c) {
                a.call(b, c, b)
            }),
            this
        },
        filter: function(a) {
            return c([].filter.call(this,
            function(b) {
                return w.matches(b, a)
            }))
        },
        add: function(a, b) {
            return c(y(this.concat(c(a, b))))
        },
        is: function(a) {
            return this.length > 0 && w.matches(this[0], a)
        },
        not: function(b) {
            var d = [];
            if (A(b) && b.call !== a) this.each(function(a) {
                b.call(this, a) || d.push(this)
            });
            else {
                var e = typeof b == "string" ? this.filter(b) : E(b) && A(b.item) ? f.call(b) : c(b);
                this.forEach(function(a) {
                    e.indexOf(a) < 0 && d.push(a)
                })
            }
            return c(d)
        },
        eq: function(a) {
            return a === -1 ? this.slice(a) : this.slice(a, +a + 1)
        },
        first: function() {
            var a = this[0];
            return a && !B(a) ? a: c(a)
        },
        last: function() {
            var a = this[this.length - 1];
            return a && !B(a) ? a: c(a)
        },
        find: function(a) {
            var b;
            return this.length == 1 ? b = w.qsa(this[0], a) : b = this.map(function() {
                return w.qsa(this, a)
            }),
            c(b)
        },
        closest: function(a, b) {
            var d = this[0];
            while (d && !w.matches(d, a)) d = d !== b && d !== g && d.parentNode;
            return c(d)
        },
        parents: function(a) {
            var b = [],
            d = this;
            while (d.length > 0) d = c.map(d,
            function(a) {
                if ((a = a.parentNode) && a !== g && b.indexOf(a) < 0) return b.push(a),
                a
            });
            return L(b, a)
        },
        parent: function(a) {
            return L(y(this.pluck("parentNode")), a)
        },
        children: function(a) {
            return L(this.map(function() {
                return f.call(this.children)
            }), a)
        },
        siblings: function(a) {
            return L(this.map(function(a, b) {
                return f.call(b.parentNode.children).filter(function(a) {
                    return a !== b
                })
            }), a)
        },
        empty: function() {
            return this.each(function() {
                this.innerHTML = ""
            })
        },
        pluck: function(a) {
            return this.map(function() {
                return this[a]
            })
        },
        show: function() {
            return this.each(function() {
                this.style.display == "none" && (this.style.display = null),
                j(this, "").getPropertyValue("display") == "none" && (this.style.display = K(this.nodeName))
            })
        },
        replaceWith: function(a) {
            return this.before(a).remove()
        },
        wrap: function(a) {
            return this.each(function() {
                c(this).wrapAll(c(a)[0].cloneNode(!1))
            })
        },
        wrapAll: function(a) {
            return this[0] && (c(this[0]).before(a = c(a)), a.append(this)),
            this
        },
        unwrap: function() {
            return this.parent().each(function() {
                c(this).replaceWith(c(this).children())
            }),
            this
        },
        clone: function() {
            return c(this.map(function() {
                return this.cloneNode(!0)
            }))
        },
        hide: function() {
            return this.css("display", "none")
        },
        toggle: function(b) {
            return (b === a ? this.css("display") == "none": b) ? this.show() : this.hide()
        },
        prev: function() {
            return c(this.pluck("previousElementSibling"))
        },
        next: function() {
            return c(this.pluck("nextElementSibling"))
        },
        html: function(b) {
            return b === a ? this.length > 0 ? this[0].innerHTML: null: this.each(function(a) {
                var d = this.innerHTML;
                c(this).empty().append(M(this, b, a, d))
            })
        },
        text: function(b) {
            return b === a ? this.length > 0 ? this[0].textContent: null: this.each(function() {
                this.textContent = b
            })
        },
        attr: function(c, d) {
            var e;
            return typeof c == "string" && d === a ? this.length == 0 || this[0].nodeType !== 1 ? a: c == "value" && this[0].nodeName == "INPUT" ? this.val() : !(e = this[0].getAttribute(c)) && c in this[0] ? this[0][c] : e: this.each(function(a) {
                if (this.nodeType !== 1) return;
                if (B(c)) for (b in c) this.setAttribute(b, c[b]);
                else this.setAttribute(c, M(this, d, a, this.getAttribute(c)))
            })
        },
        removeAttr: function(a) {
            return this.each(function() {
                this.nodeType === 1 && this.removeAttribute(a)
            })
        },
        prop: function(b, c) {
            return c === a ? this[0] ? this[0][b] : a: this.each(function(a) {
                this[b] = M(this, c, a, this[b])
            })
        },
        data: function(b, c) {
            var d = this.attr("data-" + H(b), c);
            return d !== null ? d: a
        },
        val: function(b) {
            return b === a ? this.length > 0 ? this[0].value: a: this.each(function(a) {
                this.value = M(this, b, a, this.value)
            })
        },
        offset: function() {
            if (this.length == 0) return null;
            var a = this[0].getBoundingClientRect();
            return {
                left: a.left + window.pageXOffset,
                top: a.top + window.pageYOffset,
                width: a.width,
                height: a.height
            }
        },
        css: function(c, d) {
            if (d === a && typeof c == "string") return this.length == 0 ? a: this[0].style[x(c)] || j(this[0], "").getPropertyValue(c);
            var e = "";
            for (b in c) typeof c[b] == "string" && c[b] == "" ? this.each(function() {
                this.style.removeProperty(H(b))
            }) : e += H(b) + ":" + J(b, c[b]) + ";";
            return typeof c == "string" && (d == "" ? this.each(function() {
                this.style.removeProperty(H(c))
            }) : e = H(c) + ":" + J(c, d)),
            this.each(function() {
                this.style.cssText += ";" + e
            })
        },
        index: function(a) {
            return a ? this.indexOf(c(a)[0]) : this.parent().children().indexOf(this[0])
        },
        hasClass: function(a) {
            return this.length < 1 ? !1 : I(a).test(this[0].className)
        },
        addClass: function(a) {
            return this.each(function(b) {
                d = [];
                var e = this.className,
                f = M(this, a, b, e);
                f.split(/\s+/g).forEach(function(a) {
                    c(this).hasClass(a) || d.push(a)
                },
                this),
                d.length && (this.className += (e ? " ": "") + d.join(" "))
            })
        },
        removeClass: function(b) {
            return this.each(function(c) {
                if (b === a) return this.className = "";
                d = this.className,
                M(this, b, c, d).split(/\s+/g).forEach(function(a) {
                    d = d.replace(I(a), " ")
                }),
                this.className = d.trim()
            })
        },
        toggleClass: function(b, d) {
            return this.each(function(e) {
                var f = M(this, b, e, this.className); (d === a ? !c(this).hasClass(f) : d) ? c(this).addClass(f) : c(this).removeClass(f)
            })
        }
    },
    ["width", "height"].forEach(function(b) {
        c.fn[b] = function(d) {
            var e, f = b.replace(/./,
            function(a) {
                return a[0].toUpperCase()
            });
            return d === a ? this[0] == window ? window["inner" + f] : this[0] == g ? g.documentElement["offset" + f] : (e = this.offset()) && e[b] : this.each(function(a) {
                var e = c(this);
                e.css(b, M(this, d, a, e[b]()))
            })
        }
    }),
    n.forEach(function(a, b) {
        c.fn[a] = function() {
            var a = c.map(arguments,
            function(a) {
                return B(a) ? a: w.fragment(a)
            });
            if (a.length < 1) return this;
            var d = this.length,
            e = d > 1,
            f = b < 2;
            return this.each(function(c, g) {
                for (var h = 0; h < a.length; h++) {
                    var i = a[f ? a.length - h - 1 : h];
                    O(i,
                    function(a) {
                        a.nodeName != null && a.nodeName.toUpperCase() === "SCRIPT" && (!a.type || a.type === "text/javascript") && window.eval.call(window, a.innerHTML)
                    }),
                    e && c < d - 1 && (i = i.cloneNode(!0)),
                    N(b, g, i)
                }
            })
        },
        c.fn[b % 2 ? a + "To": "insert" + (b ? "Before": "After")] = function(b) {
            return c(b)[a](this),
            this
        }
    }),
    w.Z.prototype = c.fn,
    w.camelize = x,
    w.uniq = y,
    c.zepto = w,
    c
} ();
window.Zepto = Zepto,
"$" in window || (window.$ = Zepto),
function(a) {
    function f(a) {
        return a._zid || (a._zid = d++)
    }
    function g(a, b, d, e) {
        b = h(b);
        if (b.ns) var g = i(b.ns);
        return (c[f(a)] || []).filter(function(a) {
            return a && (!b.e || a.e == b.e) && (!b.ns || g.test(a.ns)) && (!d || f(a.fn) === f(d)) && (!e || a.sel == e)
        })
    }
    function h(a) {
        var b = ("" + a).split(".");
        return {
            e: b[0],
            ns: b.slice(1).sort().join(" ")
        }
    }
    function i(a) {
        return new RegExp("(?:^| )" + a.replace(" ", " .* ?") + "(?: |$)")
    }
    function j(b, c, d) {
        a.isObject(b) ? a.each(b, d) : b.split(/\s/).forEach(function(a) {
            d(a, c)
        })
    }
    function k(b, d, e, g, i, k) {
        k = !!k;
        var l = f(b),
        m = c[l] || (c[l] = []);
        j(d, e,
        function(c, d) {
            var e = i && i(d, c),
            f = e || d,
            j = function(a) {
                var c = f.apply(b, [a].concat(a.data));
                return c === !1 && a.preventDefault(),
                c
            },
            l = a.extend(h(c), {
                fn: d,
                proxy: j,
                sel: g,
                del: e,
                i: m.length
            });
            m.push(l),
            b.addEventListener(l.e, j, k)
        })
    }
    function l(a, b, d, e) {
        var h = f(a);
        j(b || "", d,
        function(b, d) {
            g(a, b, d, e).forEach(function(b) {
                delete c[h][b.i],
                a.removeEventListener(b.e, b.proxy, !1)
            })
        })
    }
    function p(b) {
        var c = a.extend({
            originalEvent: b
        },
        b);
        return a.each(o,
        function(a, d) {
            c[a] = function() {
                return this[d] = m,
                b[a].apply(b, arguments)
            },
            c[d] = n
        }),
        c
    }
    function q(a) {
        if (! ("defaultPrevented" in a)) {
            a.defaultPrevented = !1;
            var b = a.preventDefault;
            a.preventDefault = function() {
                this.defaultPrevented = !0,
                b.call(this)
            }
        }
    }
    var b = a.zepto.qsa,
    c = {},
    d = 1,
    e = {};
    e.click = e.mousedown = e.mouseup = e.mousemove = "MouseEvents",
    a.event = {
        add: k,
        remove: l
    },
    a.proxy = function(b, c) {
        if (a.isFunction(b)) {
            var d = function() {
                return b.apply(c, arguments)
            };
            return d._zid = f(b),
            d
        }
        if (typeof c == "string") return a.proxy(b[c], b);
        throw new TypeError("expected function")
    },
    a.fn.bind = function(a, b) {
        return this.each(function() {
            k(this, a, b)
        })
    },
    a.fn.unbind = function(a, b) {
        return this.each(function() {
            l(this, a, b)
        })
    },
    a.fn.one = function(a, b) {
        return this.each(function(c, d) {
            k(this, a, b, null,
            function(a, b) {
                return function() {
                    var c = a.apply(d, arguments);
                    return l(d, b, a),
                    c
                }
            })
        })
    };
    var m = function() {
        return ! 0
    },
    n = function() {
        return ! 1
    },
    o = {
        preventDefault: "isDefaultPrevented",
        stopImmediatePropagation: "isImmediatePropagationStopped",
        stopPropagation: "isPropagationStopped"
    };
    a.fn.delegate = function(b, c, d) {
        var e = !1;
        if (c == "blur" || c == "focus") a.iswebkit ? c = c == "blur" ? "focusout": c == "focus" ? "focusin": c: e = !0;
        return this.each(function(f, g) {
            k(g, c, d, b,
            function(c) {
                return function(d) {
                    var e, f = a(d.target).closest(b, g).get(0);
                    if (f) return e = a.extend(p(d), {
                        currentTarget: f,
                        liveFired: g
                    }),
                    c.apply(f, [e].concat([].slice.call(arguments, 1)))
                }
            },
            e)
        })
    },
    a.fn.undelegate = function(a, b, c) {
        return this.each(function() {
            l(this, b, c, a)
        })
    },
    a.fn.live = function(b, c) {
        return a(document.body).delegate(this.selector, b, c),
        this
    },
    a.fn.die = function(b, c) {
        return a(document.body).undelegate(this.selector, b, c),
        this
    },
    a.fn.on = function(b, c, d) {
        return c == undefined || a.isFunction(c) ? this.bind(b, c) : this.delegate(c, b, d)
    },
    a.fn.off = function(b, c, d) {
        return c == undefined || a.isFunction(c) ? this.unbind(b, c) : this.undelegate(c, b, d)
    },
    a.fn.trigger = function(b, c) {
        return typeof b == "string" && (b = a.Event(b)),
        q(b),
        b.data = c,
        this.each(function() {
            "dispatchEvent" in this && this.dispatchEvent(b)
        })
    },
    a.fn.triggerHandler = function(b, c) {
        var d, e;
        return this.each(function(f, h) {
            d = p(typeof b == "string" ? a.Event(b) : b),
            d.data = c,
            d.target = h,
            a.each(g(h, b.type || b),
            function(a, b) {
                e = b.proxy(d);
                if (d.isImmediatePropagationStopped()) return ! 1
            })
        }),
        e
    },
    "focusin focusout load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout change select keydown keypress keyup error".split(" ").forEach(function(b) {
        a.fn[b] = function(a) {
            return this.bind(b, a)
        }
    }),
    ["focus", "blur"].forEach(function(b) {
        a.fn[b] = function(a) {
            if (a) this.bind(b, a);
            else if (this.length) try {
                this.get(0)[b]()
            } catch(c) {}
            return this
        }
    }),
    a.Event = function(a, b) {
        var c = document.createEvent(e[a] || "Events"),
        d = !0;
        if (b) for (var f in b) f == "bubbles" ? d = !!b[f] : c[f] = b[f];
        return c.initEvent(a, d, !0, null, null, null, null, null, null, null, null, null, null, null, null),
        c
    }
} (Zepto),
function(a) {
    function b(a) {
        var b = this.os = {},
        c = this.browser = {},
        d = a.match(/WebKit\/([\d.]+)/),
        e = a.match(/(Android)\s+([\d.]+)/),
        f = a.match(/(iPad).*OS\s([\d_]+)/),
        g = !f && a.match(/(iPhone\sOS)\s([\d_]+)/),
        h = a.match(/(webOS|hpwOS)[\s\/]([\d.]+)/),
        i = h && a.match(/TouchPad/),
        j = a.match(/Kindle\/([\d.]+)/),
        k = a.match(/Silk\/([\d._]+)/),
        l = a.match(/(BlackBerry).*Version\/([\d.]+)/);
        if (c.webkit = !!d) c.version = d[1];
        e && (b.android = !0, b.version = e[2]),
        g && (b.ios = b.iphone = !0, b.version = g[2].replace(/_/g, ".")),
        f && (b.ios = b.ipad = !0, b.version = f[2].replace(/_/g, ".")),
        h && (b.webos = !0, b.version = h[2]),
        i && (b.touchpad = !0),
        l && (b.blackberry = !0, b.version = l[2]),
        j && (b.kindle = !0, b.version = j[1]),
        k && (c.silk = !0, c.version = k[1]),
        !k && b.android && a.match(/Kindle Fire/) && (c.silk = !0)
    }
    b.call(a, navigator.userAgent),
    a.__detect = b
} (Zepto),
function(a, b) {
    function l(a) {
        return a.toLowerCase()
    }
    function m(a) {
        return d ? d + a: l(a)
    }
    var c = "",
    d, e, f, g = {
        Webkit: "webkit",
        Moz: "",
        O: "o",
        ms: "MS"
    },
    h = window.document,
    i = h.createElement("div"),
    j = /^((translate|rotate|scale)(X|Y|Z|3d)?|matrix(3d)?|perspective|skew(X|Y)?)$/i,
    k = {};
    a.each(g,
    function(a, e) {
        if (i.style[a + "TransitionProperty"] !== b) return c = "-" + l(a) + "-",
        d = e,
        !1
    }),
    k[c + "transition-property"] = k[c + "transition-duration"] = k[c + "transition-timing-function"] = k[c + "animation-name"] = k[c + "animation-duration"] = "",
    a.fx = {
        off: d === b && i.style.transitionProperty === b,
        cssPrefix: c,
        transitionEnd: m("TransitionEnd"),
        animationEnd: m("AnimationEnd")
    },
    a.fn.animate = function(b, c, d, e) {
        return a.isObject(c) && (d = c.easing, e = c.complete, c = c.duration),
        c && (c /= 1e3),
        this.anim(b, c, d, e)
    },
    a.fn.anim = function(d, e, f, g) {
        var h, i = {},
        l, m = this,
        n, o = a.fx.transitionEnd;
        e === b && (e = .4),
        a.fx.off && (e = 0);
        if (typeof d == "string") i[c + "animation-name"] = d,
        i[c + "animation-duration"] = e + "s",
        o = a.fx.animationEnd;
        else {
            for (l in d) j.test(l) ? (h || (h = []), h.push(l + "(" + d[l] + ")")) : i[l] = d[l];
            h && (i[c + "transform"] = h.join(" ")),
            !a.fx.off && typeof d == "object" && (i[c + "transition-property"] = Object.keys(d).join(", "), i[c + "transition-duration"] = e + "s", i[c + "transition-timing-function"] = f || "linear")
        }
        return n = function(b) {
            if (typeof b != "undefined") {
                if (b.target !== b.currentTarget) return;
                a(b.target).unbind(o, arguments.callee)
            }
            a(this).css(k),
            g && g.call(this)
        },
        e > 0 && this.bind(o, n),
        setTimeout(function() {
            m.css(i),
            e <= 0 && setTimeout(function() {
                m.each(function() {
                    n.call(this)
                })
            },
            0)
        },
        0),
        this
    },
    i = null
} (Zepto),
function($) {
    function triggerAndReturn(a, b, c) {
        var d = $.Event(b);
        return $(a).trigger(d, c),
        !d.defaultPrevented
    }
    function triggerGlobal(a, b, c, d) {
        if (a.global) return triggerAndReturn(b || document, c, d)
    }
    function ajaxStart(a) {
        a.global && $.active++===0 && triggerGlobal(a, null, "ajaxStart")
    }
    function ajaxStop(a) {
        a.global && !--$.active && triggerGlobal(a, null, "ajaxStop")
    }
    function ajaxBeforeSend(a, b) {
        var c = b.context;
        if (b.beforeSend.call(c, a, b) === !1 || triggerGlobal(b, c, "ajaxBeforeSend", [a, b]) === !1) return ! 1;
        triggerGlobal(b, c, "ajaxSend", [a, b])
    }
    function ajaxSuccess(a, b, c) {
        var d = c.context,
        e = "success";
        c.success.call(d, a, e, b),
        triggerGlobal(c, d, "ajaxSuccess", [b, c, a]),
        ajaxComplete(e, b, c)
    }
    function ajaxError(a, b, c, d) {
        var e = d.context;
        d.error.call(e, c, b, a),
        triggerGlobal(d, e, "ajaxError", [c, d, a]),
        ajaxComplete(b, c, d)
    }
    function ajaxComplete(a, b, c) {
        var d = c.context;
        c.complete.call(d, b, a),
        triggerGlobal(c, d, "ajaxComplete", [b, c]),
        ajaxStop(c)
    }
    function empty() {}
    function mimeToDataType(a) {
        return a && (a == htmlType ? "html": a == jsonType ? "json": scriptTypeRE.test(a) ? "script": xmlTypeRE.test(a) && "xml") || "text"
    }
    function appendQuery(a, b) {
        return (a + "&" + b).replace(/[&?]{1,2}/, "?")
    }
    function serializeData(a) {
        isObject(a.data) && (a.data = $.param(a.data)),
        a.data && (!a.type || a.type.toUpperCase() == "GET") && (a.url = appendQuery(a.url, a.data))
    }
    function serialize(a, b, c, d) {
        var e = $.isArray(b);
        $.each(b,
        function(b, f) {
            d && (b = c ? d: d + "[" + (e ? "": b) + "]"),
            !d && e ? a.add(f.name, f.value) : (c ? $.isArray(f) : isObject(f)) ? serialize(a, f, c, b) : a.add(b, f)
        })
    }
    var jsonpID = 0,
    isObject = $.isObject,
    document = window.document,
    key, name, rscript = /<script\b[^<]*(?:(?!<\/script>)<[^<]*)*<\/script>/gi,
    scriptTypeRE = /^(?:text|application)\/javascript/i,
    xmlTypeRE = /^(?:text|application)\/xml/i,
    jsonType = "application/json",
    htmlType = "text/html",
    blankRE = /^\s*$/;
    $.active = 0,
    $.ajaxJSONP = function(a) {
        var b = "jsonp" + ++jsonpID,
        c = document.createElement("script"),
        d = function() {
            $(c).remove(),
            b in window && (window[b] = empty),
            ajaxComplete("abort", e, a)
        },
        e = {
            abort: d
        },
        f;
        return a.error && (c.onerror = function() {
            e.abort(),
            a.error()
        }),
        window[b] = function(d) {
            clearTimeout(f),
            $(c).remove(),
            delete window[b],
            ajaxSuccess(d, e, a)
        },
        serializeData(a),
        c.src = a.url.replace(/=\?/, "=" + b),
        $("head").append(c),
        a.timeout > 0 && (f = setTimeout(function() {
            e.abort(),
            ajaxComplete("timeout", e, a)
        },
        a.timeout)),
        e
    },
    $.ajaxSettings = {
        type: "GET",
        beforeSend: empty,
        success: empty,
        error: empty,
        complete: empty,
        context: null,
        global: !0,
        xhr: function() {
            return new window.XMLHttpRequest
        },
        accepts: {
            script: "text/javascript, application/javascript",
            json: jsonType,
            xml: "application/xml, text/xml",
            html: htmlType,
            text: "text/plain"
        },
        crossDomain: !1,
        timeout: 0
    },
    $.ajax = function(options) {
        var settings = $.extend({},
        options || {});
        for (key in $.ajaxSettings) settings[key] === undefined && (settings[key] = $.ajaxSettings[key]);
        ajaxStart(settings),
        settings.crossDomain || (settings.crossDomain = /^([\w-]+:)?\/\/([^\/]+)/.test(settings.url) && RegExp.$2 != window.location.host);
        var dataType = settings.dataType,
        hasPlaceholder = /=\?/.test(settings.url);
        if (dataType == "jsonp" || hasPlaceholder) return hasPlaceholder || (settings.url = appendQuery(settings.url, "callback=?")),
        $.ajaxJSONP(settings);
        settings.url || (settings.url = window.location.toString()),
        serializeData(settings);
        var mime = settings.accepts[dataType],
        baseHeaders = {},
        protocol = /^([\w-]+:)\/\//.test(settings.url) ? RegExp.$1: window.location.protocol,
        xhr = $.ajaxSettings.xhr(),
        abortTimeout;
        settings.crossDomain || (baseHeaders["X-Requested-With"] = "XMLHttpRequest"),
        mime && (baseHeaders.Accept = mime, mime.indexOf(",") > -1 && (mime = mime.split(",", 2)[0]), xhr.overrideMimeType && xhr.overrideMimeType(mime));
        if (settings.contentType || settings.data && settings.type.toUpperCase() != "GET") baseHeaders["Content-Type"] = settings.contentType || "application/x-www-form-urlencoded";
        settings.headers = $.extend(baseHeaders, settings.headers || {}),
        xhr.onreadystatechange = function() {
            if (xhr.readyState == 4) {
                clearTimeout(abortTimeout);
                var result, error = !1;
                if (xhr.status >= 200 && xhr.status < 300 || xhr.status == 304 || xhr.status == 0 && protocol == "file:") {
                    dataType = dataType || mimeToDataType(xhr.getResponseHeader("content-type")),
                    result = xhr.responseText;
                    try {
                        dataType == "script" ? (1, eval)(result) : dataType == "xml" ? result = xhr.responseXML: dataType == "json" && (result = blankRE.test(result) ? null: JSON.parse(result))
                    } catch(e) {
                        error = e
                    }
                    error ? ajaxError(error, "parsererror", xhr, settings) : ajaxSuccess(result, xhr, settings)
                } else ajaxError(null, "error", xhr, settings)
            }
        };
        var async = "async" in settings ? settings.async: !0;
        xhr.open(settings.type, settings.url, async);
        for (name in settings.headers) xhr.setRequestHeader(name, settings.headers[name]);
        return ajaxBeforeSend(xhr, settings) === !1 ? (xhr.abort(), !1) : (settings.timeout > 0 && (abortTimeout = setTimeout(function() {
            xhr.onreadystatechange = empty,
            xhr.abort(),
            ajaxError(null, "timeout", xhr, settings)
        },
        settings.timeout)), xhr.send(settings.data ? settings.data: null), xhr)
    },
    $.get = function(a, b) {
        return $.ajax({
            url: a,
            success: b
        })
    },
    $.post = function(a, b, c, d) {
        return $.isFunction(b) && (d = d || c, c = b, b = null),
        $.ajax({
            type: "POST",
            url: a,
            data: b,
            success: c,
            dataType: d
        })
    },
    $.getJSON = function(a, b) {
        return $.ajax({
            url: a,
            success: b,
            dataType: "json"
        })
    },
    $.fn.load = function(a, b) {
        if (!this.length) return this;
        var c = this,
        d = a.split(/\s/),
        e;
        return d.length > 1 && (a = d[0], e = d[1]),
        $.get(a,
        function(a) {
            c.html(e ? $(document.createElement("div")).html(a.replace(rscript, "")).find(e).html() : a),
            b && b.call(c)
        }),
        this
    };
    var escape = encodeURIComponent;
    $.param = function(a, b) {
        var c = [];
        return c.add = function(a, b) {
            this.push(escape(a) + "=" + escape(b))
        },
        serialize(c, a, b),
        c.join("&").replace("%20", "+")
    }
} (Zepto),
function(a) {
    a.fn.serializeArray = function() {
        var b = [],
        c;
        return a(Array.prototype.slice.call(this.get(0).elements)).each(function() {
            c = a(this);
            var d = c.attr("type");
            this.nodeName.toLowerCase() != "fieldset" && !this.disabled && d != "submit" && d != "reset" && d != "button" && (d != "radio" && d != "checkbox" || this.checked) && b.push({
                name: c.attr("name"),
                value: c.val()
            })
        }),
        b
    },
    a.fn.serialize = function() {
        var a = [];
        return this.serializeArray().forEach(function(b) {
            a.push(encodeURIComponent(b.name) + "=" + encodeURIComponent(b.value))
        }),
        a.join("&")
    },
    a.fn.submit = function(b) {
        if (b) this.bind("submit", b);
        else if (this.length) {
            var c = a.Event("submit");
            this.eq(0).trigger(c),
            c.defaultPrevented || this.get(0).submit()
        }
        return this
    }
} (Zepto),
function(a) {
    function d(a) {
        return "tagName" in a ? a: a.parentNode
    }
    function e(a, b, c, d) {
        var e = Math.abs(a - b),
        f = Math.abs(c - d);
        return e >= f ? a - b > 0 ? "Left": "Right": c - d > 0 ? "Up": "Down"
    }
    function h() {
        g = null,
        b.last && (b.el.trigger("longTap"), b = {})
    }
    function i() {
        g && clearTimeout(g),
        g = null
    }
    var b = {},
    c, f = 750,
    g;
    a(document).ready(function() {
        var j, k;
        a(document.body).bind("touchstart",
        function(e) {
            j = Date.now(),
            k = j - (b.last || j),
            b.el = a(d(e.touches[0].target)),
            c && clearTimeout(c),
            b.x1 = e.touches[0].pageX,
            b.y1 = e.touches[0].pageY,
            k > 0 && k <= 250 && (b.isDoubleTap = !0),
            b.last = j,
            g = setTimeout(h, f)
        }).bind("touchmove",
        function(a) {
            i(),
            b.x2 = a.touches[0].pageX,
            b.y2 = a.touches[0].pageY
        }).bind("touchend",
        function(a) {
            i(),
            b.isDoubleTap ? (b.el.trigger("doubleTap"), b = {}) : b.x2 && Math.abs(b.x1 - b.x2) > 30 || b.y2 && Math.abs(b.y1 - b.y2) > 30 ? (b.el.trigger("swipe") && b.el.trigger("swipe" + e(b.x1, b.x2, b.y1, b.y2)), b = {}) : "last" in b && (b.el.trigger("tap"), c = setTimeout(function() {
                c = null,
                b.el.trigger("singleTap"),
                b = {}
            },
            250))
        }).bind("touchcancel",
        function() {
            c && clearTimeout(c),
            g && clearTimeout(g),
            g = c = null,
            b = {}
        })
    }),
    ["swipe", "swipeLeft", "swipeRight", "swipeUp", "swipeDown", "doubleTap", "tap", "singleTap", "longTap"].forEach(function(b) {
        a.fn[b] = function(a) {
            return this.bind(b, a)
        }
    })
} (Zepto);
function Swipe(container, options) {
    "use strict";
    var noop = function() {};
    var offloadFn = function(fn) {
        setTimeout(fn || noop, 0)
    };
    var browser = {
        addEventListener: !!window.addEventListener,
        touch: "ontouchstart" in window || window.DocumentTouch && document instanceof DocumentTouch,
        transitions: function(temp) {
            var props = ["transitionProperty", "WebkitTransition", "MozTransition", "OTransition", "msTransition"];
            for (var i in props) if (temp.style[props[i]] !== undefined) return true;
            return false
        } (document.createElement("swipe"))
    };
    if (!container) return;
    var element = container.children[0];
    var slides, slidePos, width, length;
    options = options || {};
    var index = parseInt(options.startSlide, 10) || 0;
    var speed = options.speed || 300;
    options.continuous = options.continuous !== undefined ? options.continuous: true;
    function setup() {
        slides = element.children;
        length = slides.length;
        if (slides.length < 2) options.continuous = false;
        if (browser.transitions && options.continuous && slides.length < 3) {
            element.appendChild(slides[0].cloneNode(true));
            element.appendChild(element.children[1].cloneNode(true));
            slides = element.children
        }
        slidePos = new Array(slides.length);
        width = container.getBoundingClientRect().width || container.offsetWidth;
        element.style.width = slides.length * width + "px";
        var pos = slides.length;
        while (pos--) {
            var slide = slides[pos];
            slide.style.width = width + "px";
            slide.setAttribute("data-index", pos);
            if (browser.transitions) {
                slide.style.left = pos * -width + "px";
                move(pos, index > pos ? -width: index < pos ? width: 0, 0)
            }
        }
        if (options.continuous && browser.transitions) {
            move(circle(index - 1), -width, 0);
            move(circle(index + 1), width, 0)
        }
        if (!browser.transitions) element.style.left = index * -width + "px";
        container.style.visibility = "visible"
    }
    function prev() {
        if (options.continuous) slide(index - 1);
        else if (index) slide(index - 1)
    }
    function next() {
        if (options.continuous) slide(index + 1);
        else if (index < slides.length - 1) slide(index + 1)
    }
    function circle(index) {
        return (slides.length + index % slides.length) % slides.length
    }
    function slide(to, slideSpeed) {
        if (index == to) return;
        if (browser.transitions) {
            var direction = Math.abs(index - to) / (index - to);
            if (options.continuous) {
                var natural_direction = direction;
                direction = -slidePos[circle(to)] / width;
                if (direction !== natural_direction) to = -direction * slides.length + to
            }
            var diff = Math.abs(index - to) - 1;
            while (diff--) move(circle((to > index ? to: index) - diff - 1), width * direction, 0);
            to = circle(to);
            move(index, width * direction, slideSpeed || speed);
            move(to, 0, slideSpeed || speed);
            if (options.continuous) move(circle(to - direction), -(width * direction), 0)
        } else {
            to = circle(to);
            animate(index * -width, to * -width, slideSpeed || speed)
        }
        index = to;
        offloadFn(options.callback && options.callback(index, slides[index]))
    }
    function move(index, dist, speed) {
        translate(index, dist, speed);
        slidePos[index] = dist
    }
    function translate(index, dist, speed) {
        var slide = slides[index];
        var style = slide && slide.style;
        if (!style) return;
        style.webkitTransitionDuration = style.MozTransitionDuration = style.msTransitionDuration = style.OTransitionDuration = style.transitionDuration = speed + "ms";
        style.webkitTransform = "translate(" + dist + "px,0)" + "translateZ(0)";
        style.msTransform = style.MozTransform = style.OTransform = "translateX(" + dist + "px)"
    }
    function animate(from, to, speed) {
        if (!speed) {
            element.style.left = to + "px";
            return
        }
        var start = +new Date;
        var timer = setInterval(function() {
            var timeElap = +new Date - start;
            if (timeElap > speed) {
                element.style.left = to + "px";
                if (delay) begin();
                options.transitionEnd && options.transitionEnd.call(event, index, slides[index]);
                clearInterval(timer);
                return
            }
            element.style.left = (to - from) * (Math.floor(timeElap / speed * 100) / 100) + from + "px"
        },
        4)
    }
    var delay = options.auto || 0;
    var interval;
    function begin() {
        interval = setTimeout(next, delay)
    }
    function stop() {
        delay = 0;
        clearTimeout(interval)
    }
    var start = {};
    var delta = {};
    var isScrolling;
    var events = {
        handleEvent: function(event) {
            switch (event.type) {
            case "touchstart":
                this.start(event);
                break;
            case "touchmove":
                this.move(event);
                break;
            case "touchend":
                offloadFn(this.end(event));
                break;
            case "webkitTransitionEnd":
            case "msTransitionEnd":
            case "oTransitionEnd":
            case "otransitionend":
            case "transitionend":
                offloadFn(this.transitionEnd(event));
                break;
            case "resize":
                offloadFn(setup.call());
                break
            }
            if (options.stopPropagation) event.stopPropagation()
        },
        start: function(event) {
            var touches = event.touches[0];
            start = {
                x: touches.pageX,
                y: touches.pageY,
                time: +new Date
            };
            isScrolling = undefined;
            delta = {};
            element.addEventListener("touchmove", this, false);
            element.addEventListener("touchend", this, false)
        },
        move: function(event) {
            if (event.touches.length > 1 || event.scale && event.scale !== 1) return;
            if (options.disableScroll) event.preventDefault();
            var touches = event.touches[0];
            delta = {
                x: touches.pageX - start.x,
                y: touches.pageY - start.y
            };
            if (typeof isScrolling == "undefined") {
                isScrolling = !!(isScrolling || Math.abs(delta.x) < Math.abs(delta.y))
            }
            if (!isScrolling) {
                event.preventDefault();
                stop();
                if (options.continuous) {
                    translate(circle(index - 1), delta.x + slidePos[circle(index - 1)], 0);
                    translate(index, delta.x + slidePos[index], 0);
                    translate(circle(index + 1), delta.x + slidePos[circle(index + 1)], 0)
                } else {
                    delta.x = delta.x / (!index && delta.x > 0 || index == slides.length - 1 && delta.x < 0 ? Math.abs(delta.x) / width + 1 : 1);
                    translate(index - 1, delta.x + slidePos[index - 1], 0);
                    translate(index, delta.x + slidePos[index], 0);
                    translate(index + 1, delta.x + slidePos[index + 1], 0)
                }
            }
        },
        end: function(event) {
            var duration = +new Date - start.time;
            var isValidSlide = Number(duration) < 250 && Math.abs(delta.x) > 20 || Math.abs(delta.x) > width / 2;
            var isPastBounds = !index && delta.x > 0 || index == slides.length - 1 && delta.x < 0;
            if (options.continuous) isPastBounds = false;
            var direction = delta.x < 0;
            if (!isScrolling) {
                if (isValidSlide && !isPastBounds) {
                    if (direction) {
                        if (options.continuous) {
                            move(circle(index - 1), -width, 0);
                            move(circle(index + 2), width, 0)
                        } else {
                            move(index - 1, -width, 0)
                        }
                        move(index, slidePos[index] - width, speed);
                        move(circle(index + 1), slidePos[circle(index + 1)] - width, speed);
                        index = circle(index + 1)
                    } else {
                        if (options.continuous) {
                            move(circle(index + 1), width, 0);
                            move(circle(index - 2), -width, 0)
                        } else {
                            move(index + 1, width, 0)
                        }
                        move(index, slidePos[index] + width, speed);
                        move(circle(index - 1), slidePos[circle(index - 1)] + width, speed);
                        index = circle(index - 1)
                    }
                    options.callback && options.callback(index, slides[index])
                } else {
                    if (options.continuous) {
                        move(circle(index - 1), -width, speed);
                        move(index, 0, speed);
                        move(circle(index + 1), width, speed)
                    } else {
                        move(index - 1, -width, speed);
                        move(index, 0, speed);
                        move(index + 1, width, speed)
                    }
                }
            }
            element.removeEventListener("touchmove", events, false);
            element.removeEventListener("touchend", events, false)
        },
        transitionEnd: function(event) {
            if (parseInt(event.target.getAttribute("data-index"), 10) == index) {
                if (delay) begin();
                options.transitionEnd && options.transitionEnd.call(event, index, slides[index])
            }
        }
    };
    setup();
    if (delay) begin();
    if (browser.addEventListener) {
        if (browser.touch) element.addEventListener("touchstart", events, false);
        if (browser.transitions) {
            element.addEventListener("webkitTransitionEnd", events, false);
            element.addEventListener("msTransitionEnd", events, false);
            element.addEventListener("oTransitionEnd", events, false);
            element.addEventListener("otransitionend", events, false);
            element.addEventListener("transitionend", events, false)
        }
        window.addEventListener("resize", events, false)
    } else {
        window.onresize = function() {
            setup()
        }
    }
    return {
        setup: function() {
            setup()
        },
        slide: function(to, speed) {
            stop();
            slide(to, speed)
        },
        prev: function() {
            stop();
            prev()
        },
        next: function() {
            stop();
            next()
        },
        getPos: function() {
            return index
        },
        getNumSlides: function() {
            return length
        },
        kill: function() {
            stop();
            element.style.width = "auto";
            element.style.left = 0;
            var pos = slides.length;
            while (pos--) {
                var slide = slides[pos];
                slide.style.width = "100%";
                slide.style.left = 0;
                if (browser.transitions) translate(pos, 0, 0)
            }
            if (browser.addEventListener) {
                element.removeEventListener("touchstart", events, false);
                element.removeEventListener("webkitTransitionEnd", events, false);
                element.removeEventListener("msTransitionEnd", events, false);
                element.removeEventListener("oTransitionEnd", events, false);
                element.removeEventListener("otransitionend", events, false);
                element.removeEventListener("transitionend", events, false);
                window.removeEventListener("resize", events, false)
            } else {
                window.onresize = null
            }
        }
    }
}
if (window.jQuery || window.Zepto) { (function($) {
        $.fn.Swipe = function(params) {
            return this.each(function() {
                $(this).data("Swipe", new Swipe($(this)[0], params))
            })
        }
    })(window.jQuery || window.Zepto)
}
function weixin_popwin(download_url) {
    var ua = navigator.userAgent.toLowerCase();
    if (/micromessenger/.test(ua)) {
        window.location.href = "http://a.app.qq.com/o/simple.jsp?pkgname=com.xiachufang&g_f=99999"
    } else {
        window.location.href = download_url
    }
}
function add_more() {
    $.ajax({
        type: "GET",
        url: $("#url").attr("value"),
        data: {
            limit: $("#limit").attr("value"),
            offset: $("#offset").attr("value")
        },
        dataType: "html",
        //timeout: 3000,
        success: function(data) {
            console.log(data);
            var targets = $(data).find("#add-more-container").html();
            $("#add-more-container").append(targets);
            var limit = $("#limit").attr("value");
            var offset = $("#offset").attr("value");
            var offset_new = parseInt(limit, 10) + parseInt(offset, 10);
            var total = parseInt($("#total").attr("value"), 10);
            if (offset_new < total) {
                $("#offset").attr("value", offset_new)
            } else {
                $("#add-more-button").hide()
            }
        },
        error: function(xhr, type) {
            console.log("Ajax error!")
        }
    })
} (function() {
    var navItems = document.querySelectorAll(".slider-nav li");
    var turnOnCurrent = function(index) {
        for (var i = navItems.length - 1; i >= 0; i--) {
            if (i === index) {
                navItems[i].classList.add("on")
            } else {
                navItems[i].classList.remove("on")
            }
        }
    };
    window.dishSwipe = Swipe(document.getElementById("slider"), {
        continuous: false,
        auto: 2e3,
        speed: 400,
        callback: function(index, elem) {
            turnOnCurrent(index)
        }
    })
})();